-- ***********************************************************************
--              PROJET TEMPS REEL - IUP ISI 2007-2008
-- ***********************************************************************
-- Auteurs     :    DANG Laurent
--                  DUDOGNON Damien
--                  EGGER Olivier
--                  KOUCH Hassan
--
-- Date        :    Mars 2008
-- ***********************************************************************
-- Service     :    Ce paquetage contient la definition du Poste Fixe
--                  et l'ensemble des operations qui lui sont associees
-- ***********************************************************************

-- ***********************
-- Prologue de compilation
-- ***********************
with Entrees_Sorties; use Entrees_Sorties;
with Sockets; use Sockets;
with interface_c; use interface_c;

-- **************************************
-- Specification du paquetage poste
-- **************************************
package Poste_Fixe is
   type ETAT_POSTE is (OCCUPE,PRET,DECONNECTE); -- Etat du poste fixe
    --======================================
    -- DECLARATION DE LA TACHE SERVICES
    --======================================
    task type Services is
        entry initialiser(num : in Integer; s : in Integer);
        entry appeler(n : in Integer);
 	entry consulterRepondeur;
        entry recevoirAppel(host : in String; portSocket : in Positive; appelant : Integer; acceptation : out Boolean);
        entry stop;
    end Services;

   type Poste is record
      monNumero : Integer := 0;
      monStandard : Integer := -1;
      mesServices : Services;
   end record;

   type Ptr_Poste is access Poste;
   type TAB_POSTES is array(Integer range <>) of Ptr_Poste;

   procedure transmettreAppel(appele : in Integer; host : in String; portSocket : in Positive; appelant : in Integer);-- return Integer;
   pragma Export (CPP, transmettreAppel,"transmettreAppel");

    --======================================
    -- SERVICES UTILISATEUR
    --======================================
   procedure allumer(p : in out Ptr_Poste; n : in Integer; std : in Integer);
   procedure eteindre(p : in out Ptr_Poste);

private
    procedure afficherMessage(n : in Integer; e : in ETAT_POSTE; mess : String);
    procedure afficherCommunication(appelant : in Integer; appele : in Integer; mess : String);
end Poste_Fixe;
